package xyz.xtt.asset.client;

import org.springframework.context.annotation.Bean;

import cn.hutool.extra.spring.SpringUtil;
import feign.RequestInterceptor;
import lombok.extern.slf4j.Slf4j;
import xyz.xtt.asset.constants.AssetConstants;

/**
 * @summary fegin 客户端的自定义配置
 */
@Slf4j
public class MyConfiguration {
//	@Value("${admin.requst.sign}")
//	private String sign;
//	/**
//	 * 自定义重试机制
//	 * 
//	 * @return
//	 */
//	@Bean
//	public Retryer feignRetryer() {
//		// 最大请求次数为5，初始间隔时间为100ms，下次间隔时间1.5倍递增，重试间最大间隔时间为1s，
//		return new Retryer.Default();
//	}
//
//	@Bean
//	public ErrorDecoder feignError() {
//		return (key, response) -> {
//			if (response.status() == 400) {
//				log.error("请求xxx服务400参数错误,返回:{}", response.body());
//			}
//
//			if (response.status() == 409) {
//				log.error("请求xxx服务409异常,返回:{}", response.body());
//			}
//
//			if (response.status() == 404) {
//				log.error("请求xxx服务404异常,返回:{}", response.body());
//			}
//
//			// 其他异常交给Default去解码处理
//			// 这里使用单例即可，Default不用每次都去new
//			return new ErrorDecoder.Default().decode(key, response);
//		};
//	}
//
//	/**
//	 * fegin 拦截器
//	 * 
//	 * @return
//	 */
//	@Bean
//	public RequestInterceptor requestInterceptor(@Value("${user.info.thirdAuthCode}") String thirdAuthCode) {
//		return template -> {
//			template.header(AssetConstants.AUTHORIZATION, thirdAuthCode);
//		};
//	}
//	private final AdminRequestProperties adminRequestProperties;
//
//	// 通过构造函数注入配置
//	public MyConfiguration(AdminRequestProperties adminRequestProperties) {
//		this.adminRequestProperties = adminRequestProperties;
//	}
//
//	// 使用配置项
//	public String getThirdAuthCode() {
//		return adminRequestProperties.getThirdAuthCode();
//	}
//
//	// 定义 Feign 的 RequestInterceptor
	@Bean
	public RequestInterceptor requestInterceptor() {
		return template -> {
			AdminRequestProperties adminProperties = SpringUtil.getBean(AdminRequestProperties.class);
			String thirdAuthCode = adminProperties.getThirdAuthCode();
			template.header(AssetConstants.AUTHORIZATION, thirdAuthCode);
		};
	}
}